package ruide_info_mvc.base.core.ioc;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * 自定义IOC容器,重写IOC<br/>
 * 仅供架构使用,业务代码不可以使用此类,因为会吃掉不少内存,并且会出现幻读BEAN的现象.<br/>
 * 如果你读过spring init源码,会比BEAN init还要早初始化,所以会导致XMX,XMS中内存溢出现象.<br/>
 * 违反了 阿里巴巴代码规范 中的spring 使用规范! <br/>
 * 业务代码禁用!!!
 * @ClassName CustomApplicationContext
 * @Author wangBo
 * @Date 2019/7/20 0020 下午 9:29
 * @Version 1.0
 */
@Component(value = "customApplicationContext")
public class CustomApplicationContext implements ApplicationContextAware , DisposableBean {

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        CustomIoc.setApplicationContext(applicationContext);
    }

    /**
     * 功能描述: 销毁IOC
     * @Author wangBo
     * @Date 2019/7/4 0004 下午 2:07
     **/
    public void destroy() throws Exception{
        CustomIoc.clear();
    }
}
